In computer systems, particularly enterprise networks, managing “quality of service” can be important. In this context, “quality of service” relates to how well users' expectations of the performance of the system are met. In a networked computer system, a user's perception, and therefore quality of service, is heavily influenced by the latency with which different types of information are transmitted over the network. For example, a network may deliver datagrams with latencies that vary between microseconds and several hundreds of milliseconds, depending on network loading. Such latencies will be adequate for many applications. However, for some applications, such as VoIP and other applications that provide an interactive experience to a user, such variations in latency will be noticeable, causing the user to perceive a low quality of service.
Poor quality of service frequently occurs when too many datagrams need to be transmitted through a network “bottleneck.” Datagrams are queued at the bottleneck, creating latency. In an enterprise, a bottleneck may occur at a connection to the Internet or other similar gateway at the edges of the enterprise network. Bottlenecks can also occur within an enterprise network, such as at a trunk line connecting zones within the network.
To improve quality of service, network components can be designed to process datagrams with different priorities. Datagrams for which high latency creates a poor user experience may be assigned a higher priority. Giving priority to these datagrams keeps latency for those datagrams low, even at a bottleneck, and increases the overall quality of service. Alternatively, datagrams for which high latency has relatively little effect on user perception of the quality of the network may be transmitted with lower priority.
The ability to manage quality of service has been available in some computer systems. For example, codes, called ToS or DSCP codes, may be inserted in datagram headers. A router or other network element constructed to recognize ToS or DSCP codes will typically maintain different queues and assign a datagram to a queue based on the DSCP or ToS code. Datagrams in a queue associated with a higher priority code will be given higher priority in selecting the next datagram to process, which reduces latency for higher priority datagrams relative to lower priority datagrams.
Additionally, drivers that manage the transmission of datagrams over a network can be equipped to “throttle” datagram transmission in proportion to a setting provided with a datagram. When a throttle setting is applied to a datagram, the driver may buffer the datagram before transmitting it over the network to keep the rate of transmission below a rate specified by the throttle setting.